package com.qishao.edu_service;

/**
 * 使用双重校验锁实现单例模式
 * */
public class Singleton {

    /** 使用Volatile关键字修饰变量（所有的'写'操作都先于'读'操作发生），在多线程情况下防止指令重排（即在多线程下代码的执行顺序可能会改变，而不是按照原本的从上往下执行）*/
    private static volatile Singleton SINGLETON = null;

    private Singleton(){};

    /** 提供给外部获取实例使用*/
    public Singleton getInstance(){
        if(null == SINGLETON){
            synchronized (Singleton.class){
                if(null == SINGLETON){
                    try {
                        Thread.sleep(1000);
                        SINGLETON = new Singleton();
                    }catch (Exception e){
                        e.getStackTrace();
                    }
                }
            }
        }
        return SINGLETON;
    }

}
